# common/templatetags/global_filters.py（全局过滤器文件）
from django.template import Library
from django.urls import reverse, NoReverseMatch

register = Library()


@register.filter(name='url_exists')
def url_exists(url_name, args=None):
    """
    修复参数格式：确保args是可迭代对象（列表/元组）
    """
    try:
        # 1. 处理参数：若args为None（无参数），设为空元组
        if args is None:
            reverse_args = ()
        # 2. 若args是单个值（如整数pk），转为元组（加逗号确保是元组，而非括号表达式）
        elif not isinstance(args, (list, tuple)):
            reverse_args = (args,)  # 关键修复：(2,) 是元组，(2) 是整数
        # 3. 若args已是列表/元组，直接使用
        else:
            reverse_args = args

        # 4. 传递正确格式的args给reverse
        reverse(url_name, args=reverse_args)
        return True
    except NoReverseMatch:
        return False

# from django import template
#
# register = template.Library()

@register.filter(name='add_attr')
def add_attr(field, attr):
    """给表单字段添加属性，格式："attr1:value1,attr2:value2" """
    attrs = {}
    for a in attr.split(','):
        key, value = a.split(':')
        attrs[key] = value
    return field.as_widget(attrs=attrs)